﻿/*
 PennyAuctionTracker
 Copyright (C) 2011  Devin Bileck
 
 This program is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free Software Foundation;
 either version 2 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 See the GNU General Public License for more details.

 You should have received a copy of the GNU General Public License along with this program;
 if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;

namespace PennyAuctionTracker
{
	/// <summary>
	/// Form containing information about the program.
	/// </summary>
	public partial class AboutForm : Form
	{
		/// <summary>
		/// Class constructor.
		/// </summary>
		public AboutForm()
		{
			// The InitializeComponent() call is required for Windows Forms designer support
			InitializeComponent();
			
			// Display the product name
            this.textProductName.Text = AssemblyProduct;
            
            // Display the description
            string projectURL = "http://pennyauctiontracker.codeplex.com/";
            this.textDescription.Text = AssemblyDescription + "\nFor more information, visit the project page " + projectURL + ".";
            this.textDescription.Links.Add(this.textDescription.Text.IndexOf(projectURL), projectURL.Length, projectURL);
            
            // Display the version
            this.textVersion.Text = String.Format("Version {0}", AssemblyVersion);
            
            // Display the copyright text
            this.textCopyright.Text = AssemblyCopyright;
		}
		
		/// <summary>
		/// Handles the clicked event for links within the description.
		/// </summary>
		void TextDescriptionLinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
		{
			// Get the target link
	        string target = e.Link.LinkData as string;
	
	        // If the target link looks like a URL, navigate to it
	        if (target != null && (target.StartsWith("www.") || target.StartsWith("http://")))
	        {
	            System.Diagnostics.Process.Start(target);
	        }
		}

        #region Assembly Attribute Accessors
        
        public string AssemblyTitle
        {
            get
            {
                object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
                if (attributes.Length > 0)
                {
                    AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
                    if (titleAttribute.Title != "")
                    {
                        return titleAttribute.Title;
                    }
                }
                return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
            }
        }

        public string AssemblyVersion
        {
            get
            {
                return Assembly.GetExecutingAssembly().GetName().Version.ToString();
            }
        }

        public string AssemblyDescription
        {
            get
            {
                object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
                if (attributes.Length == 0)
                {
                    return "";
                }
                return ((AssemblyDescriptionAttribute)attributes[0]).Description;
            }
        }

        public string AssemblyProduct
        {
            get
            {
                object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
                if (attributes.Length == 0)
                {
                    return "";
                }
                return ((AssemblyProductAttribute)attributes[0]).Product;
            }
        }

        public string AssemblyCopyright
        {
            get
            {
                object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
                if (attributes.Length == 0)
                {
                    return "";
                }
                return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
            }
        }

        public string AssemblyCompany
        {
            get
            {
                object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
                if (attributes.Length == 0)
                {
                    return "";
                }
                return ((AssemblyCompanyAttribute)attributes[0]).Company;
            }
        }
        
        #endregion
    }
}